package com.yuw.genertic2;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class TestDriver {

	public static void main(String[] args) {
		test03();

	}
	/**
	 * TreeMap的使用
	 */
	private static void test03() {
		// LinkedHashMap元素的存储和读取操作
		// 创建一个LinkedHashMap的是实例对象
		// 面向接口的编程：左侧是接口父类，右侧是实现子类的实例对象（多态：父类指代子类）
		Map<String,Object> map = new TreeMap<String,Object>();
		//存入键值对（姓名-年龄）
		map.put("zhangsan", 30);
		map.put("lisi",20);
		map.put("lisi", "40岁");//和泛型保持一致
		map.put("null", 10);
		map.put("wangwu", 18);
		
		System.out.println("增强型的for循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 取出TreeMap集合中的Key元素集合
		Set<String> setKeys= map.keySet();
		// 把对map的遍历转变为对keyset集合的遍历，然后使用get方法获取与key对应的value值
		for(Object key :setKeys) {
			//通过key取出value值
			Object val =map.get(key);
			//输出信息
			System.out.println(key + " -- " + val);
			
		}
		System.out.println("使用迭代器循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 获取当前集合对象的迭代器对象
		Iterator<String> it = setKeys.iterator();
		// 迭代器的 hasNext方法判定有么有下一个元素对象；
		// 迭代器的 next方法获取下一个元素对象，并将迭代器迭代位置（指针）向后挪动一个偏移量
		while (it.hasNext()) {
			// 取出当前遍历的key的值
			Object key = it.next();
			// 通过key取出value值
			Object val = map.get(key);
			// 输出信息
			System.out.println(key + " -- " + val);
		}
		System.out.println("增强型的for循环遍历取出HashMap集合中的Entry元素集合进行遍历：");

		Set<Map.Entry<String,Object>> setEntries = map.entrySet();

		// 增强型的for循环遍历set（存储了entry键值对的set）

		for (Entry<String,Object> objEntry : setEntries) {
			// 从键值对中获取key的值
			String key = objEntry.getKey();
			// 从键值对中获取value的值
			Object val = objEntry.getValue();
			// 输出信息
			System.out.println(key + " -- " + val);
		}
		
		// TODO 使用迭代器的方式遍历键值对entry的set集合，进而打印map中的所有键值对的值
		
		
	}

	
	
	/**
	 * LinkedHashMap的使用
	 */
	private static void test02() {
		// LinkedHashMap元素的存储和读取操作
		// 创建一个LinkedHashMap的是实例对象
		// 面向接口的编程：左侧是接口父类，右侧是实现子类的实例对象（多态：父类指代子类）
		Map map = new LinkedHashMap();
		//存入键值对（姓名-年龄）
		map.put("zhangsan", 30);
		map.put("lisi",20);
		map.put("lisi", 40);
		map.put("null", 10);
		map.put("wangwu", 18);
		
		System.out.println("增强型的for循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 取出LinkedHashMap集合中的Key元素集合
		Set setKeys= map.keySet();
		// 把对map的遍历转变为对keyset集合的遍历，然后使用get方法获取与key对应的value值
		for(Object key :setKeys) {
			//通过key取出value值
			Object val =map.get(key);
			//输出信息
			System.out.println(key + " -- " + val);
			
		}
		System.out.println("使用迭代器循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 获取当前集合对象的迭代器对象
		Iterator it = setKeys.iterator();
		// 迭代器的 hasNext方法判定有么有下一个元素对象；
		// 迭代器的 next方法获取下一个元素对象，并将迭代器迭代位置（指针）向后挪动一个偏移量
		while (it.hasNext()) {
			// 取出当前遍历的key的值
			Object key = it.next();
			// 通过key取出value值
			Object val = map.get(key);
			// 输出信息
			System.out.println(key + " -- " + val);
		}
		
	}

	
	
	
	/**
	 * HashMap的使用
	 */
	private static void test01() {
		// HashMap元素的存储和读取操作
		// 创建一个HashMap的是实例对象
		// 面向接口的编程：左侧是接口父类，右侧是实现子类的实例对象（多态：父类指代子类）
		Map map = new HashMap();
		//存入键值对（姓名-年龄）
		map.put("zhangsan", 30);
		map.put("lisi",20);
		map.put("lisi", 40);
		map.put("null", 10);
		map.put("wangwu", 18);
		
		System.out.println("增强型的for循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 取出HashMap集合中的Key元素集合
		Set setKeys= map.keySet();
		// 把对map的遍历转变为对keyset集合的遍历，然后使用get方法获取与key对应的value值
		for(Object key :setKeys) {
			//通过key取出value值
			Object val =map.get(key);
			//输出信息
			System.out.println(key + " -- " + val);
			
		}
		System.out.println("使用迭代器循环遍历取出HashMap集合中的Key元素集合进行遍历：");
		// 获取当前集合对象的迭代器对象
		Iterator it = setKeys.iterator();
		// 迭代器的 hasNext方法判定有么有下一个元素对象；
		// 迭代器的 next方法获取下一个元素对象，并将迭代器迭代位置（指针）向后挪动一个偏移量
		while (it.hasNext()) {
			// 取出当前遍历的key的值
			Object key = it.next();
			// 通过key取出value值
			Object val = map.get(key);
			// 输出信息
			System.out.println(key + " -- " + val);
		}
		
	}

}
